/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy.
 */
package cz.pecinovsky.english.pojj.adv_demo.gui._03_menu;

import cz.pecinovsky.english.pojj.adv_framework.game_txt.IGame;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JMenu;
import javax.swing.JMenuItem;



/*******************************************************************************
 * 
 * Instance třídy {@code MenuGame_1} představují nabídku obsahující
 * příkazy přímo ovládající hraní hry a jeho parametry.
 * 
 * @author    Rudolf PECINOVSKÝ
 * @version   0.00.000
 */
@SuppressWarnings("serial")
class MenuGame_1 extends JMenu
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    /** GUI, pro které tato instance pracuje. */
    private final GUI_03_1 gui;



//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří novou nabídku obsahující příkazy přímo ovládající hraní hry
     * a jeho parametry.
     * 
     * @param gui GUI, pro které bude tato instance pracovat
     */
    MenuGame_1(GUI_03_1 gui)
    {
        super("Hra");
        setMnemonic('H');
        this.gui = gui;

        addItemRestartGame();
        addItemExitGUI();
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Přidá položku nabídky, která ukončí a znovu spustí právě hranou hru.
     */
    private void addItemRestartGame()
    {
        JMenuItem item = new JMenuItem("Restart hry", 'R');
        this.add(item);

        item.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                IGame game = gui.getGame();
                //GUI ošetřuje i případnou potřebu zastavení běžící hry
                gui.startGame(game);
            }
        });
    }


    /***************************************************************************
     * Přidá položku nabídky která ukončí běh dané aplikace.
     */
    private void addItemExitGUI()
    {
       JMenuItem item = new JMenuItem("Konec", 'K');
        this.add(item);

        item.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                IGame game = gui.getGame();
                game.stop();
                System.exit(0);
            }
        });
    }



//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        MenuGame_1 inst = new MenuGame_1();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
